package com.qjdchina.sku.biz;

import java.io.File;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.ss.usermodel.PictureData;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.qjdchina.commons.model.PageModel;
import com.qjdchina.commons.result.Result;
import com.qjdchina.sku.model.RelProductSkuAttribute;
import com.qjdchina.sku.model.RolePrice;
import com.qjdchina.sku.model.SkuProduct;
import com.qjdchina.sku.model.query.SkuProductQueryVO;
import com.qjdchina.sku.model.vo.MongoSkuProductVO;
import com.qjdchina.sku.model.vo.SkuProductCompareVO;
import com.qjdchina.sku.model.vo.SkuProductDetailVO;
import com.qjdchina.sku.model.vo.SkuProductVO;

public interface SkuProductManager {

    /**
     * colection名称
     */
    public static String SKU_PRODUCT_COLLECTION = "product";

    /**
     * 根据品类获取品牌 
     * shenpingfeng
     * 2016年11月22日
     * @return
     */
    public Result<PageModel<SkuProductVO>> queryPagedProductList(
            SkuProductQueryVO skuProductQueryVO, PageModel<SkuProductVO> pageModel);

    /**
     * 产品对比
     * @param ids
     * @return
     */
    public Result<SkuProductCompareVO> productCompare(Integer[] ids,RolePrice rolePrice);

    public Result<String> save(MongoSkuProductVO productVO);


    /***
     * 
     * 分页查询产品信息   
     * @author wangzheng 2016年11月25日 上午11:40:46   
     * @param skuProductQueryVO
     * @param pageModel
     * @return  
     * @since JDK 1.7
     */
    public Result<PageModel<SkuProductVO>> pageQueryProduct(SkuProductQueryVO skuProductQueryVO,
            PageModel<SkuProductVO> pageModel);

	public Result<List<SkuProduct>> selectAllProduct();

    public Result<List<RelProductSkuAttribute>> selectByProductId(Integer productId);

	public Result<String> saveUploadedFileUpdate(MultipartFile uploadedFile);

	/**
	 * 查询产品详情
	 * shenpingfeng
	 * 2016年12月1日
	 * @param productId
	 * @return
	 */
	public Result<SkuProductDetailVO> findProductDetailByProdcutId(Integer productId,HttpServletResponse response);

	public Result<File> loadUploadedFileUpdate(String filePath, HttpServletResponse response);

	/**
	 * 创建产品信息
	 * shenpingfeng
	 * 2016年12月2日
	 * @param skuProductVO
	 * @return
	 */
	public Result<String> createSkuProduct(SkuProductVO skuProductVO);
	
	/**
	 * 根据productCode查询
	 * shenpingfeng
	 * 2016年12月5日
	 * @param productCode
	 * @return
	 */
	public Result<SkuProductVO> findProductByProductCode(String productCode);
	/**
	 * 更新产品信息 
	 * shenpingfeng
	 * 2016年12月5日
	 * @param skuProductVO
	 * @return
	 */
	public Result<String> updateSkuProduct(SkuProductVO skuProductVO);

	/**
	 * 根据productId查询
	 * shenpingfeng
	 * 2016年12月22日
	 * @param productId
	 * @return
	 */
	public Result<SkuProduct> findByProductId(Integer productId);

	public Result<String> deleteProductByMongoDB(Integer productId);

	/**
	 * 创建product sku属性
	 * shenpingfeng
	 * 2016年12月7日
	 * @param relProductAkuAttribute
	 * @return
	 */
	public Result<String> createProductSkuAttribute(RelProductSkuAttribute relProductAkuAttribute);

	/**
	 * 更新
	 * shenpingfeng
	 * 2016年12月7日
	 * @param relProductAkuAttribute
	 * @return
	 */
	public Result<String> updateProductSkuAttribute(RelProductSkuAttribute relProductAkuAttribute);

	/**
	 * 根据productId和skuItemId查询
	 * shenpingfeng
	 * 2016年12月7日
	 * @param productId
	 * @param skuItemId
	 * @return
	 */
	public Result<RelProductSkuAttribute> findProductSkuAttributeByProductIdAndSkuItemId(Integer productId, Integer skuItemId);
	/**
	 * 删除
	 * shenpingfeng
	 * 2016年12月14日
	 * @param skuProduct
	 * @return
	 */
	public Result<String> deleteSkuProduct(SkuProduct skuProduct);
	/**
	 * mongodb更新
	 * shenpingfeng
	 * 2017年2月10日
	 * @param skuProduct
	 * @return
	 */
	public Result<String> updateSkuProduct(MongoSkuProductVO skuProduct);
	/**
	 * 根据skuCategoryId和skuBrandId查询产品
	 * shenpingfeng
	 * 2017年2月16日
	 * @param skuCategoryId
	 * @param skuBrandId
	 * @return
	 */
	public Result<List<SkuProductVO>> findProductBySkuCategoryIdAndSkuBrandId(Integer skuCategoryId, Integer skuBrandId);
	/**
	 * 根据skuBrandId查询
	 * shenpingfeng
	 * 2017年2月23日
	 * @param skuBrandId
	 * @return
	 */
	public Result<List<SkuProductVO>> getProductBySkuBrandId(Integer skuBrandId);
	/**
	 * 根据条件查询
	 * shenpingfeng
	 * 2017年2月27日
	 * @param skuProductQueryVO
	 * @return
	 */
	public Result<List<SkuProductVO>> getProductByStatement(SkuProductQueryVO skuProductQueryVO);

	public Result<String> uploadedFileUpdate(File file,String type);

}
